package com.hong.taotaomall;//package com.hong;


import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class CodeGenerator {


    public static void main(String[] args) {

        //如果在空项目下创建模块项目，需要制定模块的名称,否则设置为空
//===============================================================================================
        String moduleName = "";     //  单体项目
//        String moduleName = "Wish-Cloud-master/wish-modules/wish-contract";     //  多模块项目示例
        String projectPath = System.getProperty("user.dir");
//===============================================================================================
        String databaseName = "taotaomall";
        FastAutoGenerator.create(
//===============================================================================================
                        "jdbc:mysql://127.0.0.1:3306/" + databaseName + "?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai",
                        "root", "root")
                // 全局配置
                .globalConfig(
                        (scanner, builder) ->
                                builder
                                        .outputDir(projectPath + "/" + moduleName + "/src/main/java")
                                        .author(scanner.apply("请输入作者名称：")).fileOverride()
//                                        .enableSwagger()    //  开启 swagger 模式
                )
                // 包配置
                .packageConfig((scanner, builder) -> builder
//===============================================================================================
                                .parent("com.hong")                         //  父包名
                                .moduleName(scanner.apply("请输入包名："))  //  父包模块名
                                .pathInfo(Collections.singletonMap(
                                        OutputFile.xml,                     //曾经是mapperXml
                                        projectPath + "/" + moduleName
                                                + "/src/main/resources/mappers/"))
                )
                // 策略配置
                .strategyConfig((scanner, builder) -> builder
                        .addInclude(getTables(scanner.apply("请输入表名，2个及以上请使用英文逗号分隔（ps:所有表，输入 all）：")))
//===============================================================================================
//                        .addTablePrefix("t_")       //  过滤表前缀
                        .controllerBuilder()        //  生成@RestController控制器
                        .enableRestStyle()
                        .enableHyphenStyle()
                        .enableHyphenStyle()        //  开启Controller驼峰转连字符
                        .entityBuilder()
                        .enableLombok()             //  实体是否为lombok模型
                        .naming(NamingStrategy.underline_to_camel)          //  数据库表字段映射到实体类的命名策略
                        .columnNaming(NamingStrategy.underline_to_camel)    //  数据库表字段映射到实体类字段的命名策略
                        .mapperBuilder().enableMapperAnnotation().enableBaseResultMap()
//===============================================================================================
//                        .addTableFills(
//                                new Column("create_time", FieldFill.INSERT)
//                        )
                        .build())
                //  模板引擎配置，默认 Velocity 可选模板引擎 Beetl 或 Freemarker
//                .templateEngine(new BeetlTemplateEngine())
                .templateEngine(new VelocityTemplateEngine())
                . execute();
    }

    // 处理 all 情况
    protected static List<String> getTables(String tables) {
        return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
    }
}
